from rest_framework import serializers
from meituan.models import Merchant


##1、用来序列化数据 ORM----->JSON
##2、用来验证表单数据；From
##3、可以创建数据，修改数据等

## Serialzier 的构造函数 传递连两个参数
## 1、instance 需要一个 ORM 对象 或者是一个 queryset 对象，用来将 ORM 模型序列化成 JSON 的
## 2、date: 把需要验证的数据传递给 data 用来验证这些数据是不是符合要求


'''序列化器 对 Merchant 模型进行序列化和反序列化 只不是 drf 的 ModelSerializer'''
class MerchantSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)   ## read_only 只读 不能通过序列化修改
    name = serializers.CharField(max_length=200,required=True)
    logo = serializers.CharField(max_length=200,required=True)
    address = serializers.CharField(max_length=200,required=True)
    notice = serializers.CharField(max_length=200,required=True)
    up_send = serializers.DecimalField(max_digits=6,decimal_places=2,required=False)
    lon = serializers.FloatField(required=True)
    lat = serializers.FloatField(required=True)

    """instance 是需要更新的 实例"""
    def update(self, instance, validated_data):
        instance.name = validated_data.get("name",instance.name)
        instance.logo = validated_data.get("logo",instance.logo)
        instance.address = validated_data.get("address",instance.address)
        instance.notice = validated_data.get("notice",instance.notice)
        instance.up_send = validated_data.get("up_send",instance.up_send)
        instance.lon = validated_data.get("lon",instance.lon)
        instance.lat = validated_data.get("lat",instance.lat)
        instance.save()
        return instance

    def create(self, validated_data):
        ## **validated_data 解包字典 将每个键值对 最为关键字参数传递给 creata 方法
        return Merchant.objects.create(**validated_data)
